package fabrica.dao;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import fabrica.entities.ItemSolicitudFabricacionEntity;
import fabrica.entities.SolicitudFabricacionEntity;
import fabrica.dto.ItemSolicitudFabricacion;
import fabrica.dto.SolicitudFabricacion;

@Stateless
public class FabricaDAO implements IFabricaDAO {
	
	//Entity Manager
	@PersistenceContext(unitName="IA_DS")
	private EntityManager manager;
	

	@Override
	public List<SolicitudFabricacion> obtenerSolicitudesFabricacionEstado(String estado) {
		String query = "from SolicitudFabricacionEntity sfE WHERE sfE.estado = ?";
		Query q = manager.createQuery(query).setParameter(1,estado);
		List<SolicitudFabricacionEntity> solList = (List<SolicitudFabricacionEntity>) q.getResultList();
		
		List<SolicitudFabricacion> listaResult = new ArrayList<SolicitudFabricacion>();
		for (SolicitudFabricacionEntity sol : solList){
			listaResult.add(sol.toDTO());
		}
		return listaResult;
	}

	@Override
	public SolicitudFabricacion agregarSolicitudFabricacion(SolicitudFabricacion solicitudFabricacion) {
		System.out.println("entra a Fabrica DAO");
		SolicitudFabricacionEntity solE = this.SolicitudFabricaciontoEntity(solicitudFabricacion);
		manager.persist(solE);
		SolicitudFabricacion solDto = solE.toDTO();
		return solDto;
	}
	
	@Override
	public void ModificarSolicitudFabricacion(SolicitudFabricacion solicitudFabricacion) {
		manager.merge(this.SolicitudFabricaciontoEntity(solicitudFabricacion));
	}
	
	public SolicitudFabricacion buscarSolicitudFabricacion(int idSolicitudFabricacion) {
		String query = "from SolicitudFabricacionEntity sfE WHERE sfE.id = ?";
		Query q = manager.createQuery(query).setParameter(1,idSolicitudFabricacion);
		SolicitudFabricacionEntity sol = (SolicitudFabricacionEntity) q.getSingleResult();
		
		return sol.toDTO();
	}
	
	//toEntity
		public SolicitudFabricacionEntity SolicitudFabricaciontoEntity(SolicitudFabricacion sol){
			SolicitudFabricacionEntity solFEntity = new SolicitudFabricacionEntity();
			
			solFEntity.setEstado(sol.getEstado());
			solFEntity.setFechaEntrega(sol.getFechaEntrega());
			solFEntity.setFechaSolicitud(sol.getFechaSolicitud());
			solFEntity.setId(sol.getId());
			solFEntity.setIdModulo(sol.getIdModulo());

			
			for (ItemSolicitudFabricacion art : sol.getArticulos()){
				
				solFEntity.getArticulos().add(this.itemSolicitudFabricacionEntity(art));
			}
			
			return solFEntity;
		}
		
		
		public ItemSolicitudFabricacionEntity itemSolicitudFabricacionEntity(ItemSolicitudFabricacion item){
			ItemSolicitudFabricacionEntity itemEntity = new ItemSolicitudFabricacionEntity();
			
			itemEntity.setCantidad(item.getCantidad());
			if (item.getId() != 0)
				itemEntity.setId(item.getId());
			itemEntity.setDescripcion(item.getDescripcion());
			itemEntity.setIdArticulo(item.getIdArticulo());
			
			return itemEntity;
		}
	
	

}
